From b03361366a936836e76ae10e1bc2a5dbcb7ce19e Mon Sep 17 00:00:00 2001 From: William Hua Date: Tue, 14 Jun 2016 15:42:13 -0400 Subject: [PATCH] gtkmenu: add gtk_menu_popup_at_* () Adds the following functions: gtk_menu_popup_at_rect () gtk_menu_popup_at_widget () gtk_menu_popup_at_pointer () https://bugzilla.gnome.org/show_bug.cgi?id=756579 --- docs/reference/gtk/Makefile.am | 3 + docs/reference/gtk/gtk3-sections.txt | 3 + docs/reference/gtk/images/popup-anchors.png | Bin 0 -> 17514 bytes docs/reference/gtk/images/popup-at.svg | 745 ++++++++++++++++++ docs/reference/gtk/images/popup-flip.png | Bin 0 -> 21504 bytes docs/reference/gtk/images/popup-slide.png | Bin 0 -> 45993 bytes gtk/gtkmarshalers.list | 1 + gtk/gtkmenu.c | 809 ++++++++++++++++++-- gtk/gtkmenu.h | 16 + gtk/gtkmenuprivate.h | 18 + 10 files changed, 1521 insertions(+), 74 deletions(-) create mode 100644 docs/reference/gtk/images/popup-anchors.png create mode 100644 docs/reference/gtk/images/popup-at.svg create mode 100644 docs/reference/gtk/images/popup-flip.png create mode 100644 docs/reference/gtk/images/popup-slide.png diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am index b3c8fc7447..5a88a12453 100644 --- a/docs/reference/gtk/Makefile.am +++ b/docs/reference/gtk/Makefile.am @@ -387,6 +387,9 @@ HTML_IMAGES = \ $(srcdir)/images/panes.png \ $(srcdir)/images/pagesetupdialog.png \ $(srcdir)/images/placessidebar.png \ + $(srcdir)/images/popup-anchors.png \ + $(srcdir)/images/popup-flip.png \ + $(srcdir)/images/popup-slide.png \ $(srcdir)/images/printdialog.png \ $(srcdir)/images/progressbar.png \ $(srcdir)/images/radio-group.png \ diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index 0d02cd4413..a049638ab7 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -2246,6 +2246,9 @@ gtk_menu_new_from_model gtk_menu_set_screen gtk_menu_reorder_child gtk_menu_attach +gtk_menu_popup_at_rect +gtk_menu_popup_at_widget +gtk_menu_popup_at_pointer gtk_menu_popup_for_device gtk_menu_popup gtk_menu_set_accel_group diff --git a/docs/reference/gtk/images/popup-anchors.png b/docs/reference/gtk/images/popup-anchors.png new file mode 100644 index 0000000000000000000000000000000000000000..7e72e0bc74a6a02eaee45308b6421de23d72f2a9 GIT binary patch literal 17514 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/gtk/images/popup-flip.png b/docs/reference/gtk/images/popup-flip.png new file mode 100644 index 0000000000000000000000000000000000000000..af8cf5a2ce358322fba148e7dfd9a6b238b1adda GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list index c6f12a3d81..32c0ded7b0 100644 --- a/gtk/gtkmarshalers.list +++ b/gtk/gtkmarshalers.list @@ -106,6 +106,7 @@ VOID:POINTER VOID:POINTER,INT VOID:POINTER,BOOLEAN VOID:POINTER,POINTER,BOOLEAN +VOID:POINTER,POINTER,BOOLEAN,BOOLEAN VOID:POINTER,POINTER,POINTER VOID:POINTER,UINT VOID:STRING diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 8531cf7080..238c27e5f1 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -137,6 +137,7 @@ #include "a11y/gtkmenuaccessible.h" +#include "gdk/gdk-private.h" #define NAVIGATION_REGION_OVERSHOOT 50 /* How much the navigation region * extends below the submenu @@ -183,6 +184,7 @@ typedef struct enum { MOVE_SCROLL, + POPPED_UP, LAST_SIGNAL }; @@ -195,7 +197,11 @@ enum { PROP_TEAROFF_STATE, PROP_TEAROFF_TITLE, PROP_MONITOR, - PROP_RESERVE_TOGGLE_SIZE + PROP_RESERVE_TOGGLE_SIZE, + PROP_ANCHOR_HINTS, + PROP_RECT_ANCHOR_DX, + PROP_RECT_ANCHOR_DY, + PROP_MENU_TYPE_HINT }; enum { @@ -561,6 +567,57 @@ gtk_menu_class_init (GtkMenuClass *class) G_TYPE_NONE, 1, GTK_TYPE_SCROLL_TYPE); + /** + * GtkMenu::popped-up: + * @menu: the #GtkMenu that popped up + * @flipped_rect: (nullable): the position of @menu after any possible + * flipping or %NULL if the backend can't obtain it + * @final_rect: (nullable): the final position of @menu or %NULL if the + * backend can't obtain it + * @flipped_x: %TRUE if the anchors were flipped horizontally + * @flipped_y: %TRUE if the anchors were flipped vertically + * + * Emitted when the position of @menu is finalized after being popped up + * using gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), or + * gtk_menu_popup_at_pointer (). + * + * @menu might be flipped over the anchor rectangle in order to keep it + * on-screen, in which case @flipped_x and @flipped_y will be set to %TRUE + * accordingly. + * + * @flipped_rect is the ideal position of @menu after any possible flipping, + * but before any possible sliding. @final_rect is @flipped_rect, but possibly + * translated in the case that flipping is still ineffective in keeping @menu + * on-screen. + * + * ![](popup-slide.png) + * + * The blue menu is @menu's ideal position, the green menu is @flipped_rect, + * and the red menu is @final_rect. + * + * See gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), + * gtk_menu_popup_at_pointer (), #GtkMenu:anchor-hints, + * #GtkMenu:rect-anchor-dx, #GtkMenu:rect-anchor-dy, and + * #GtkMenu:menu-type-hint. + * + * Since: 3.22 + * Stability: Unstable + */ + menu_signals[POPPED_UP] = + g_signal_new_class_handler (I_("popped-up"), + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST, + NULL, + NULL, + NULL, + _gtk_marshal_VOID__POINTER_POINTER_BOOLEAN_BOOLEAN, + G_TYPE_NONE, + 4, + G_TYPE_POINTER, + G_TYPE_POINTER, + G_TYPE_BOOLEAN, + G_TYPE_BOOLEAN); + /** * GtkMenu:active: * @@ -693,6 +750,120 @@ gtk_menu_class_init (GtkMenuClass *class) TRUE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); + /** + * GtkMenu:anchor-hints: + * + * Positioning hints for aligning the menu relative to a rectangle. + * + * These hints determine how the menu should be positioned in the case that + * the menu would fall off-screen if placed in its ideal position. + * + * ![](popup-flip.png) + * + * For example, %GDK_ANCHOR_FLIP_Y will replace %GDK_GRAVITY_NORTH_WEST with + * %GDK_GRAVITY_SOUTH_WEST and vice versa if the menu extends beyond the + * bottom edge of the monitor. + * + * See gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), + * gtk_menu_popup_at_pointer (), #GtkMenu:rect-anchor-dx, + * #GtkMenu:rect-anchor-dy, #GtkMenu:menu-type-hint, and #GtkMenu::popped-up. + * + * Since: 3.22 + * Stability: Unstable + */ + g_object_class_install_property (gobject_class, + PROP_ANCHOR_HINTS, + g_param_spec_flags ("anchor-hints", + P_("Anchor hints"), + P_("Positioning hints for when the menu might fall off-screen"), + GDK_TYPE_ANCHOR_HINTS, + GDK_ANCHOR_FLIP | + GDK_ANCHOR_SLIDE | + GDK_ANCHOR_RESIZE, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); + + /** + * GtkMenu:rect-anchor-dx: + * + * Horizontal offset to apply to the menu, i.e. the rectangle or widget + * anchor. + * + * See gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), + * gtk_menu_popup_at_pointer (), #GtkMenu:anchor-hints, + * #GtkMenu:rect-anchor-dy, #GtkMenu:menu-type-hint, and #GtkMenu::popped-up. + * + * Since: 3.22 + * Stability: Unstable + */ + g_object_class_install_property (gobject_class, + PROP_RECT_ANCHOR_DX, + g_param_spec_int ("rect-anchor-dx", + P_("Rect anchor dx"), + P_("Rect anchor horizontal offset"), + G_MININT, + G_MAXINT, + 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); + + /** + * GtkMenu:rect-anchor-dy: + * + * Vertical offset to apply to the menu, i.e. the rectangle or widget anchor. + * + * See gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), + * gtk_menu_popup_at_pointer (), #GtkMenu:anchor-hints, + * #GtkMenu:rect-anchor-dx, #GtkMenu:menu-type-hint, and #GtkMenu::popped-up. + * + * Since: 3.22 + * Stability: Unstable + */ + g_object_class_install_property (gobject_class, + PROP_RECT_ANCHOR_DY, + g_param_spec_int ("rect-anchor-dy", + P_("Rect anchor dy"), + P_("Rect anchor vertical offset"), + G_MININT, + G_MAXINT, + 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); + + /** + * GtkMenu:menu-type-hint: + * + * The #GdkWindowTypeHint to use for the menu's #GdkWindow. + * + * See gtk_menu_popup_at_rect (), gtk_menu_popup_at_widget (), + * gtk_menu_popup_at_pointer (), #GtkMenu:anchor-hints, + * #GtkMenu:rect-anchor-dx, #GtkMenu:rect-anchor-dy, and #GtkMenu::popped-up. + * + * Since: 3.22 + * Stability: Unstable + */ + g_object_class_install_property (gobject_class, + PROP_MENU_TYPE_HINT, + g_param_spec_enum ("menu-type-hint", + P_("Menu type hint"), + P_("Menu window type hint"), + GDK_TYPE_WINDOW_TYPE_HINT, + GDK_WINDOW_TYPE_HINT_POPUP_MENU, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); + /** * GtkMenu:horizontal-padding: * @@ -964,6 +1135,18 @@ G_GNUC_END_IGNORE_DEPRECATIONS; case PROP_RESERVE_TOGGLE_SIZE: gtk_menu_set_reserve_toggle_size (menu, g_value_get_boolean (value)); break; + case PROP_ANCHOR_HINTS: + menu->priv->anchor_hints = g_value_get_flags (value); + break; + case PROP_RECT_ANCHOR_DX: + menu->priv->rect_anchor_dx = g_value_get_int (value); + break; + case PROP_RECT_ANCHOR_DY: + menu->priv->rect_anchor_dy = g_value_get_int (value); + break; + case PROP_MENU_TYPE_HINT: + menu->priv->menu_type_hint = g_value_get_enum (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1008,6 +1191,18 @@ G_GNUC_END_IGNORE_DEPRECATIONS; case PROP_RESERVE_TOGGLE_SIZE: g_value_set_boolean (value, gtk_menu_get_reserve_toggle_size (menu)); break; + case PROP_ANCHOR_HINTS: + g_value_set_flags (value, menu->priv->anchor_hints); + break; + case PROP_RECT_ANCHOR_DX: + g_value_set_int (value, menu->priv->rect_anchor_dx); + break; + case PROP_RECT_ANCHOR_DY: + g_value_set_int (value, menu->priv->rect_anchor_dy); + break; + case PROP_MENU_TYPE_HINT: + g_value_set_enum (value, menu->priv->menu_type_hint); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1167,6 +1362,23 @@ gtk_menu_init (GtkMenu *menu) gtk_css_node_set_state (bottom_arrow_node, gtk_css_node_get_state (widget_node)); } +static void +moved_to_rect_cb (GdkWindow *window, + const GdkRectangle *flipped_rect, + const GdkRectangle *final_rect, + gboolean flipped_x, + gboolean flipped_y, + GtkMenu *menu) +{ + g_signal_emit (menu, + menu_signals[POPPED_UP], + 0, + flipped_rect, + final_rect, + flipped_x, + flipped_y); +} + static void gtk_menu_destroy (GtkWidget *widget) { @@ -1194,7 +1406,10 @@ gtk_menu_destroy (GtkWidget *widget) g_clear_object (&priv->accel_group); if (priv->toplevel) - gtk_widget_destroy (priv->toplevel); + { + g_signal_handlers_disconnect_by_func (priv->toplevel, moved_to_rect_cb, menu); + gtk_widget_destroy (priv->toplevel); + } if (priv->tearoff_window) gtk_widget_destroy (priv->tearoff_window); @@ -1549,53 +1764,16 @@ associate_menu_grab_transfer_window (GtkMenu *menu) g_object_set_data (G_OBJECT (toplevel_window), I_("gdk-attached-grab-window"), transfer_window); } -/** - * gtk_menu_popup_for_device: - * @menu: a #GtkMenu - * @device: (allow-none): a #GdkDevice - * @parent_menu_shell: (allow-none): the menu shell containing the triggering - * menu item, or %NULL - * @parent_menu_item: (allow-none): the menu item whose activation triggered - * the popup, or %NULL - * @func: (allow-none): a user supplied function used to position the menu, - * or %NULL - * @data: (allow-none): user supplied data to be passed to @func - * @destroy: (allow-none): destroy notify for @data - * @button: the mouse button which was pressed to initiate the event - * @activate_time: the time at which the activation event occurred - * - * Displays a menu and makes it available for selection. - * - * Applications can use this function to display context-sensitive menus, - * and will typically supply %NULL for the @parent_menu_shell, - * @parent_menu_item, @func, @data and @destroy parameters. The default - * menu positioning function will position the menu at the current position - * of @device (or its corresponding pointer). - * - * The @button parameter should be the mouse button pressed to initiate - * the menu popup. If the menu popup was initiated by something other than - * a mouse button press, such as a mouse button release or a keypress, - * @button should be 0. - * - * The @activate_time parameter is used to conflict-resolve initiation of - * concurrent requests for mouse/keyboard grab requests. To function - * properly, this needs to be the time stamp of the user event (such as - * a mouse click or key press) that caused the initiation of the popup. - * Only if no such event is available, gtk_get_current_event_time() can - * be used instead. - * - * Since: 3.0 - */ -void -gtk_menu_popup_for_device (GtkMenu *menu, - GdkDevice *device, - GtkWidget *parent_menu_shell, - GtkWidget *parent_menu_item, - GtkMenuPositionFunc func, - gpointer data, - GDestroyNotify destroy, - guint button, - guint32 activate_time) +static void +gtk_menu_popup_internal (GtkMenu *menu, + GdkDevice *device, + GtkWidget *parent_menu_shell, + GtkWidget *parent_menu_item, + GtkMenuPositionFunc func, + gpointer data, + GDestroyNotify destroy, + guint button, + guint32 activate_time) { GtkMenuPrivate *priv = menu->priv; GtkWidget *widget; @@ -1801,6 +1979,73 @@ gtk_menu_popup_for_device (GtkMenu *menu, _gtk_menu_shell_update_mnemonics (menu_shell); } +/** + * gtk_menu_popup_for_device: + * @menu: a #GtkMenu + * @device: (allow-none): a #GdkDevice + * @parent_menu_shell: (allow-none): the menu shell containing the triggering + * menu item, or %NULL + * @parent_menu_item: (allow-none): the menu item whose activation triggered + * the popup, or %NULL + * @func: (allow-none): a user supplied function used to position the menu, + * or %NULL + * @data: (allow-none): user supplied data to be passed to @func + * @destroy: (allow-none): destroy notify for @data + * @button: the mouse button which was pressed to initiate the event + * @activate_time: the time at which the activation event occurred + * + * Displays a menu and makes it available for selection. + * + * Applications can use this function to display context-sensitive menus, + * and will typically supply %NULL for the @parent_menu_shell, + * @parent_menu_item, @func, @data and @destroy parameters. The default + * menu positioning function will position the menu at the current position + * of @device (or its corresponding pointer). + * + * The @button parameter should be the mouse button pressed to initiate + * the menu popup. If the menu popup was initiated by something other than + * a mouse button press, such as a mouse button release or a keypress, + * @button should be 0. + * + * The @activate_time parameter is used to conflict-resolve initiation of + * concurrent requests for mouse/keyboard grab requests. To function + * properly, this needs to be the time stamp of the user event (such as + * a mouse click or key press) that caused the initiation of the popup. + * Only if no such event is available, gtk_get_current_event_time() can + * be used instead. + * + * Since: 3.0 + */ +void +gtk_menu_popup_for_device (GtkMenu *menu, + GdkDevice *device, + GtkWidget *parent_menu_shell, + GtkWidget *parent_menu_item, + GtkMenuPositionFunc func, + gpointer data, + GDestroyNotify destroy, + guint button, + guint32 activate_time) +{ + GtkMenuPrivate *priv; + + g_return_if_fail (GTK_IS_MENU (menu)); + + priv = menu->priv; + priv->rect_window = NULL; + priv->widget = NULL; + + gtk_menu_popup_internal (menu, + device, + parent_menu_shell, + parent_menu_item, + func, + data, + destroy, + button, + activate_time); +} + /** * gtk_menu_popup: * @menu: a #GtkMenu @@ -1853,6 +2098,347 @@ gtk_menu_popup (GtkMenu *menu, button, activate_time); } +static GdkDevice * +get_device_for_event (const GdkEvent *event) +{ + GdkDevice *device = NULL; + GdkSeat *seat = NULL; + GdkScreen *screen = NULL; + GdkDisplay *display = NULL; + + device = gdk_event_get_device (event); + + if (device) + return device; + + seat = gdk_event_get_seat (event); + + if (!seat) + { + screen = gdk_event_get_screen (event); + + if (screen) + display = gdk_screen_get_display (screen); + + if (!display) + { + g_warning ("no display for event, using default"); + display = gdk_display_get_default (); + } + + if (display) + seat = gdk_display_get_default_seat (display); + } + + return seat ? gdk_seat_get_pointer (seat) : NULL; +} + +/** + * gtk_menu_popup_at_rect: + * @menu: the #GtkMenu to pop up + * @rect_window: (not nullable): the #GdkWindow @rect is relative to + * @rect: (not nullable): the #GdkRectangle to align @menu with + * @rect_anchor: the point on @rect to align with @menu's anchor point + * @menu_anchor: the point on @menu to align with @rect's anchor point + * @trigger_event: (nullable): the #GdkEvent that initiated this request or + * %NULL if it's the current event + * + * Displays @menu and makes it available for selection. + * + * See gtk_menu_popup_at_widget () and gtk_menu_popup_at_pointer (), which + * handle more common cases for popping up menus. + * + * @menu will be positioned at @rect, aligning their anchor points. @rect is + * relative to the top-left corner of @rect_window. @rect_anchor and + * @menu_anchor determine anchor points on @rect and @menu to pin together. + * @menu can optionally be offset by #GtkMenu:rect-anchor-dx and + * #GtkMenu:rect-anchor-dy. + * + * Anchors should be specified under the assumption that the text direction is + * left-to-right; they will be flipped horizontally automatically if the text + * direction is right-to-left. + * + * Other properties that influence the behaviour of this function are + * #GtkMenu:anchor-hints and #GtkMenu:menu-type-hint. Connect to the + * #GtkMenu::popped-up signal to find out how it was actually positioned. + * + * Since: 3.22 + * Stability: Unstable + */ +void +gtk_menu_popup_at_rect (GtkMenu *menu, + GdkWindow *rect_window, + const GdkRectangle *rect, + GdkGravity rect_anchor, + GdkGravity menu_anchor, + const GdkEvent *trigger_event) +{ + GtkMenuPrivate *priv; + GdkEvent *current_event = NULL; + GdkDevice *device = NULL; + guint button = 0; + guint32 activate_time = GDK_CURRENT_TIME; + + g_return_if_fail (GTK_IS_MENU (menu)); + g_return_if_fail (GDK_IS_WINDOW (rect_window)); + g_return_if_fail (rect); + + priv = menu->priv; + priv->rect_window = rect_window; + priv->rect = *rect; + priv->widget = NULL; + priv->rect_anchor = rect_anchor; + priv->menu_anchor = menu_anchor; + + if (!trigger_event) + { + current_event = gtk_get_current_event (); + trigger_event = current_event; + } + + if (trigger_event) + { + device = get_device_for_event (trigger_event); + gdk_event_get_button (trigger_event, &button); + activate_time = gdk_event_get_time (trigger_event); + } + else + g_warning ("no trigger event for menu popup"); + + gtk_menu_popup_internal (menu, + device, + NULL, + NULL, + NULL, + NULL, + NULL, + button, + activate_time); + + g_clear_pointer (¤t_event, gdk_event_free); +} + +/** + * gtk_menu_popup_at_widget: + * @menu: the #GtkMenu to pop up + * @widget: (not nullable): the #GtkWidget to align @menu with + * @widget_anchor: the point on @widget to align with @menu's anchor point + * @menu_anchor: the point on @menu to align with @widget's anchor point + * @trigger_event: (nullable): the #GdkEvent that initiated this request or + * %NULL if it's the current event + * + * Displays @menu and makes it available for selection. + * + * See gtk_menu_popup_at_pointer () to pop up a menu at the master pointer. + * gtk_menu_popup_at_rect () also allows you to position a menu at an arbitrary + * rectangle. + * + * ![](popup-anchors.png) + * + * @menu will be positioned at @widget, aligning their anchor points. + * @widget_anchor and @menu_anchor determine anchor points on @widget and @menu + * to pin together. @menu can optionally be offset by #GtkMenu:rect-anchor-dx + * and #GtkMenu:rect-anchor-dy. + * + * Anchors should be specified under the assumption that the text direction is + * left-to-right; they will be flipped horizontally automatically if the text + * direction is right-to-left. + * + * Other properties that influence the behaviour of this function are + * #GtkMenu:anchor-hints and #GtkMenu:menu-type-hint. Connect to the + * #GtkMenu::popped-up signal to find out how it was actually positioned. + * + * Since: 3.22 + * Stability: Unstable + */ +void +gtk_menu_popup_at_widget (GtkMenu *menu, + GtkWidget *widget, + GdkGravity widget_anchor, + GdkGravity menu_anchor, + const GdkEvent *trigger_event) +{ + GtkMenuPrivate *priv; + GdkEvent *current_event = NULL; + GdkDevice *device = NULL; + guint button = 0; + guint32 activate_time = GDK_CURRENT_TIME; + GtkWidget *parent_menu_shell = NULL; + GtkWidget *parent_menu_item = NULL; + + g_return_if_fail (GTK_IS_MENU (menu)); + g_return_if_fail (GTK_IS_WIDGET (widget)); + + priv = menu->priv; + priv->rect_window = NULL; + priv->widget = widget; + priv->rect_anchor = widget_anchor; + priv->menu_anchor = menu_anchor; + + if (!trigger_event) + { + current_event = gtk_get_current_event (); + trigger_event = current_event; + } + + if (trigger_event) + { + device = get_device_for_event (trigger_event); + gdk_event_get_button (trigger_event, &button); + activate_time = gdk_event_get_time (trigger_event); + } + else + g_warning ("no trigger event for menu popup"); + + if (GTK_IS_MENU_ITEM (priv->widget)) + { + parent_menu_item = priv->widget; + + if (GTK_IS_MENU_SHELL (gtk_widget_get_parent (parent_menu_item))) + parent_menu_shell = gtk_widget_get_parent (parent_menu_item); + } + + gtk_menu_popup_internal (menu, + device, + parent_menu_shell, + parent_menu_item, + NULL, + NULL, + NULL, + button, + activate_time); + + g_clear_pointer (¤t_event, gdk_event_free); +} + +/** + * gtk_menu_popup_at_pointer: + * @menu: the #GtkMenu to pop up + * @trigger_event: (nullable): the #GdkEvent that initiated this request or + * %NULL if it's the current event + * + * Displays @menu and makes it available for selection. + * + * See gtk_menu_popup_at_widget () to pop up a menu at a widget. + * gtk_menu_popup_at_rect () also allows you to position a menu at an arbitrary + * rectangle. + * + * @menu will be positioned at the pointer associated with @trigger_event. + * + * Properties that influence the behaviour of this function are + * #GtkMenu:anchor-hints, #GtkMenu:rect-anchor-dx, #GtkMenu:rect-anchor-dy, and + * #GtkMenu:menu-type-hint. Connect to the #GtkMenu::popped-up signal to find + * out how it was actually positioned. + * + * Since: 3.22 + * Stability: Unstable + */ +void +gtk_menu_popup_at_pointer (GtkMenu *menu, + const GdkEvent *trigger_event) +{ + GdkEvent *current_event = NULL; + GdkWindow *rect_window = NULL; + GdkDevice *device = NULL; + GdkRectangle rect = { 0, 0, 1, 1 }; + + g_return_if_fail (GTK_IS_MENU (menu)); + + if (!trigger_event) + { + current_event = gtk_get_current_event (); + trigger_event = current_event; + } + + if (trigger_event) + { + rect_window = gdk_event_get_window (trigger_event); + + if (rect_window) + { + device = get_device_for_event (trigger_event); + + if (device && gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD) + device = gdk_device_get_associated_device (device); + + if (device) + gdk_window_get_device_position (rect_window, device, &rect.x, &rect.y, NULL); + } + } + else + g_warning ("no trigger event for menu popup"); + + gtk_menu_popup_at_rect (menu, + rect_window, + &rect, + GDK_GRAVITY_SOUTH_EAST, + GDK_GRAVITY_NORTH_WEST, + trigger_event); + + g_clear_pointer (¤t_event, gdk_event_free); +} + +static void +get_arrows_border (GtkMenu *menu, + GtkBorder *border) +{ + GtkMenuPrivate *priv = menu->priv; + gint top_arrow_height, bottom_arrow_height; + + gtk_css_gadget_get_preferred_size (priv->top_arrow_gadget, + GTK_ORIENTATION_VERTICAL, + -1, + &top_arrow_height, NULL, + NULL, NULL); + gtk_css_gadget_get_preferred_size (priv->bottom_arrow_gadget, + GTK_ORIENTATION_VERTICAL, + -1, + &bottom_arrow_height, NULL, + NULL, NULL); + + border->top = priv->upper_arrow_visible ? top_arrow_height : 0; + border->bottom = priv->lower_arrow_visible ? bottom_arrow_height : 0; + border->left = border->right = 0; +} + +/** + * gtk_menu_update_scroll_offset: + * @menu: the #GtkMenu that popped up + * @flipped_rect: (nullable): the position of @menu after any possible flipping + * or %NULL if unknown + * @final_rect: (nullable): the final position of @menu or %NULL if unknown + * @flipped_x: %TRUE if the anchors were flipped horizontally + * @flipped_y: %TRUE if the anchors were flipped vertically + * @user_data: user data + * + * Updates the scroll offset of @menu based on the amount of sliding done while + * positioning @menu. Connect this to the #GtkMenu::popped-up signal to keep the + * contents of the menu vertically aligned with their ideal position, for combo + * boxes for example. + * + * Since: 3.22 + * Stability: Private + */ +void +gtk_menu_update_scroll_offset (GtkMenu *menu, + const GdkRectangle *flipped_rect, + const GdkRectangle *final_rect, + gboolean flipped_x, + gboolean flipped_y, + gpointer user_data) +{ + GtkBorder arrows_border; + + g_return_if_fail (GTK_IS_MENU (menu)); + + if (!flipped_rect || !final_rect) + return; + + get_arrows_border (menu, &arrows_border); + menu->priv->scroll_offset = arrows_border.top + (final_rect->y - flipped_rect->y); + gtk_menu_scroll_to (menu, menu->priv->scroll_offset); +} + /** * gtk_menu_popdown: * @menu: a #GtkMenu @@ -2517,29 +3103,6 @@ gtk_menu_reorder_child (GtkMenu *menu, } } -static void -get_arrows_border (GtkMenu *menu, - GtkBorder *border) -{ - GtkMenuPrivate *priv = menu->priv; - gint top_arrow_height, bottom_arrow_height; - - gtk_css_gadget_get_preferred_size (priv->top_arrow_gadget, - GTK_ORIENTATION_VERTICAL, - -1, - &top_arrow_height, NULL, - NULL, NULL); - gtk_css_gadget_get_preferred_size (priv->bottom_arrow_gadget, - GTK_ORIENTATION_VERTICAL, - -1, - &bottom_arrow_height, NULL, - NULL, NULL); - - border->top = priv->upper_arrow_visible ? top_arrow_height : 0; - border->bottom = priv->lower_arrow_visible ? bottom_arrow_height : 0; - border->left = border->right = 0; -} - static void get_menu_padding (GtkWidget *widget, GtkBorder *padding) @@ -4280,8 +4843,8 @@ gtk_menu_deactivate (GtkMenuShell *menu_shell) } static void -gtk_menu_position (GtkMenu *menu, - gboolean set_scroll_offset) +gtk_menu_position_legacy (GtkMenu *menu, + gboolean set_scroll_offset) { GtkMenuPrivate *priv = menu->priv; GtkWidget *widget; @@ -4519,6 +5082,104 @@ gtk_menu_position (GtkMenu *menu, priv->scroll_offset = scroll_offset; } +static GdkGravity +get_horizontally_flipped_anchor (GdkGravity anchor) +{ + switch (anchor) + { + case GDK_GRAVITY_STATIC: + case GDK_GRAVITY_NORTH_WEST: + return GDK_GRAVITY_NORTH_EAST; + case GDK_GRAVITY_NORTH: + return GDK_GRAVITY_NORTH; + case GDK_GRAVITY_NORTH_EAST: + return GDK_GRAVITY_NORTH_WEST; + case GDK_GRAVITY_WEST: + return GDK_GRAVITY_EAST; + case GDK_GRAVITY_CENTER: + return GDK_GRAVITY_CENTER; + case GDK_GRAVITY_EAST: + return GDK_GRAVITY_WEST; + case GDK_GRAVITY_SOUTH_WEST: + return GDK_GRAVITY_SOUTH_EAST; + case GDK_GRAVITY_SOUTH: + return GDK_GRAVITY_SOUTH; + case GDK_GRAVITY_SOUTH_EAST: + return GDK_GRAVITY_SOUTH_WEST; + } + + g_warning ("unknown GdkGravity: %d", anchor); + return anchor; +} + +static void +gtk_menu_position (GtkMenu *menu, + gboolean set_scroll_offset) +{ + GtkMenuPrivate *priv = menu->priv; + GdkWindow *rect_window = NULL; + GdkRectangle rect; + GtkTextDirection text_direction = GTK_TEXT_DIR_NONE; + GdkGravity rect_anchor; + GdkGravity menu_anchor; + GdkWindow *toplevel; + + if (priv->rect_window) + { + rect_window = priv->rect_window; + rect = priv->rect; + } + else if (priv->widget) + { + rect_window = gtk_widget_get_window (priv->widget); + gtk_widget_get_allocation (priv->widget, &rect); + text_direction = gtk_widget_get_direction (priv->widget); + } + + if (!rect_window) + { + gtk_menu_position_legacy (menu, set_scroll_offset); + return; + } + + /* Realize so we have the proper width and height to figure out + * the right place to popup the menu. + */ + gtk_widget_realize (priv->toplevel); + + if (!gtk_widget_get_visible (priv->toplevel)) + gtk_window_set_type_hint (GTK_WINDOW (priv->toplevel), priv->menu_type_hint); + + if (text_direction == GTK_TEXT_DIR_NONE) + text_direction = gtk_widget_get_direction (GTK_WIDGET (menu)); + + if (text_direction == GTK_TEXT_DIR_RTL) + { + rect_anchor = get_horizontally_flipped_anchor (priv->rect_anchor); + menu_anchor = get_horizontally_flipped_anchor (priv->menu_anchor); + } + else + { + rect_anchor = priv->rect_anchor; + menu_anchor = priv->menu_anchor; + } + + toplevel = gtk_widget_get_window (priv->toplevel); + + gdk_window_set_transient_for (toplevel, rect_window); + + g_signal_handlers_disconnect_by_func (toplevel, moved_to_rect_cb, menu); + g_signal_connect (toplevel, "moved-to-rect", G_CALLBACK (moved_to_rect_cb), menu); + + GDK_PRIVATE_CALL (gdk_window_move_to_rect) (toplevel, + &rect, + rect_anchor, + menu_anchor, + priv->anchor_hints, + priv->rect_anchor_dx, + priv->rect_anchor_dy); +} + static void gtk_menu_remove_scroll_timeout (GtkMenu *menu) { diff --git a/gtk/gtkmenu.h b/gtk/gtkmenu.h index 5b8cb14694..70c7c2f5b9 100644 --- a/gtk/gtkmenu.h +++ b/gtk/gtkmenu.h @@ -152,6 +152,22 @@ void gtk_menu_popup_for_device (GtkMenu *menu, GDestroyNotify destroy, guint button, guint32 activate_time); +GDK_AVAILABLE_IN_3_22 +void gtk_menu_popup_at_rect (GtkMenu *menu, + GdkWindow *rect_window, + const GdkRectangle *rect, + GdkGravity rect_anchor, + GdkGravity menu_anchor, + const GdkEvent *trigger_event); +GDK_AVAILABLE_IN_3_22 +void gtk_menu_popup_at_widget (GtkMenu *menu, + GtkWidget *widget, + GdkGravity widget_anchor, + GdkGravity menu_anchor, + const GdkEvent *trigger_event); +GDK_AVAILABLE_IN_3_22 +void gtk_menu_popup_at_pointer (GtkMenu *menu, + const GdkEvent *trigger_event); /* Position the menu according to its position function. Called * from gtkmenuitem.c when a menu-item changes its allocation diff --git a/gtk/gtkmenuprivate.h b/gtk/gtkmenuprivate.h index cb6ec25241..92c4de63c1 100644 --- a/gtk/gtkmenuprivate.h +++ b/gtk/gtkmenuprivate.h @@ -53,6 +53,16 @@ struct _GtkMenuPrivate gint position_x; gint position_y; + GdkWindow *rect_window; + GdkRectangle rect; + GtkWidget *widget; + GdkGravity rect_anchor; + GdkGravity menu_anchor; + GdkAnchorHints anchor_hints; + gint rect_anchor_dx; + gint rect_anchor_dy; + GdkWindowTypeHint menu_type_hint; + guint toggle_size; guint accel_size; @@ -130,6 +140,14 @@ struct _GtkMenuPrivate gint initial_drag_offset; }; +G_GNUC_INTERNAL +void gtk_menu_update_scroll_offset (GtkMenu *menu, + const GdkRectangle *flipped_rect, + const GdkRectangle *final_rect, + gboolean flipped_x, + gboolean flipped_y, + gpointer user_data); + G_END_DECLS #endif /* __GTK_MENU_PRIVATE_H__ */ -- 2.30.2